// 平台端：commandHandler.ts
import { createGet, createPost } from "@/utils/request";
import type { Response } from "@/mctp-api";
import type { AxiosRequestConfig } from 'axios';

// 1. 固定模块白名单（仅允许指定模块转发）
const ALLOWED_MODULES = [
  'CalibrationForm',
  'TaskForm',
  'CreateTaskForm',
  'TestForm',
  'LoginForm',
  'DeviceForm',
  'UserForm',
  'HelpForm'
] as const;
type ModuleType = typeof ALLOWED_MODULES[number];

// 2. 验证模块合法性
const isValidModule = (moudleType: string): moudleType is ModuleType => {
  return (ALLOWED_MODULES as readonly string[]).includes(moudleType);
};

const createTaskAray = [
  "StartCreateTask",
  "CancelCreateTask",
  "CompleteCreateTask",
  "OpenTask",
  "CloseTask"
] as const;

/**
 * 平台命令转发核心函数：完全复刻 createPost 的参数结构和逻辑
 * @param controllerUrl 控制器URL（替代 createPost 的 url）
 * @param fixedParams 固定参数（对齐 createPost 的 fixedParams）
 * @param data 业务数据（对齐 createPost 的 data）
 * @param params URL 参数（对齐 createPost 的 params）
 * @param config Axios 配置（对齐 createPost 的 config）
 * @returns 和 createPost 完全一致的 Promise<Response<R>>
 */
export async function handleCommand<
  D extends Record<string, any> = Record<string, any>,
  P extends Record<string, any> = Record<string, any>,
  R = any
>(
  // moudleType: string,
  controllerUrl: string,
  fixedParams?: any,
  data?: D,
  params?: P,
  config: AxiosRequestConfig = {}
): Promise<Response<R>> {
  // 验证模块合法性
  // if (!isValidModule(moudleType as ModuleType)) {
  //   throw new Error(`不支持的模块: ${moudleType}，允许的模块: ${ALLOWED_MODULES.join(', ')}`);
  // }

  console.log("config配置内容", config, "params配置", params);

  const { commandName, command } = fixedParams || {};

  const unifiedCommand = commandName || command || "";

  // 1. 获取后端控制器URL（替代 createPost 的 url）

  // const controllerName = moudleType.replace('Form', '');
  // let controllerUrl = `/api/${controllerName}/SendCommand`;
  // if (unifiedCommand === "GetSolutionsByCondition") {
  //   controllerUrl = `/api/Solution/SendCommand`;
  // }
  // else if (createTaskAray.includes(unifiedCommand)) {
  //   controllerUrl = `/api/${controllerName}/${unifiedCommand}`;
  // }
  // else if (controllerName === "Login") {
  //   controllerUrl = `/api/Auth/SendCommand`;
  // }

  console.log("controllerUrl", controllerUrl);

  // 从fixedParams中提取请求配置
  const { requestMethod = 'POST', responseType = 'json' } = fixedParams || {};

  // 构建axios配置
  const axiosConfig = {
    ...config,
    ...(responseType === 'blob' && { responseType: 'blob' as const })
  };

  // 根据请求方式选择底层函数
  if (requestMethod === 'GET') {
    // if (controllerName.includes("Help")) {
    //   controllerUrl = `/api/GlobalConfig/${unifiedCommand}`;
    // }
    // else {
    //   controllerUrl = `/api/${controllerName}/${unifiedCommand}`;
    // }
    const apiRequest = createGet<P, R>(controllerUrl);
    return apiRequest(params, axiosConfig);
  } else {
    const apiRequest = createPost<D, R>(controllerUrl, fixedParams);
    return apiRequest(data, params, axiosConfig);
  }
}